package kw.android.AProject.Sprite;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;

public class Sprite {
	Context 					mContext;
	Resources 					mRes;
	Bitmap[] 					mImage;			// default image. up image
	int 						mWidth, mHeight;
	int 						mX, mY;
	int 						mCurrentX, mCurrentY;
	int 						mImageState=0;	
	
	public Sprite(Context context) {
		mContext = context;
		mRes = mContext.getResources();
		mImage = new Bitmap[2];		// 0 = up, 1 = down
		mMatrix = new Matrix();
	}
	
	public void doDraw(Canvas canvas) {
		
	}
	
	private Matrix mMatrix;
	float[] mValues = new float[9];
	public void doDrawWithMatrix(Canvas canvas, Matrix matrix) {
		// TODO Auto-generated method stub		
		mMatrix.set(matrix);
		// scale은 이미 matrix에 적용되어 있다.

		mMatrix.preTranslate(mX, mY);	
		
		// 포스트 이기에 원래 이미지에다가  추가 지정.
		canvas.drawBitmap(mImage[0], mMatrix, null);
	}
	
	/**이미지 사이즈 지정. setImageRes 로 먼저 이미지를 정해야 한다.
	 * 이 함수를 호출 안하면 이미지의 기본 값 사용.
	 * @throws Exception 
	 **/
	public void setSize(int width, int height) {
		mWidth = width; mHeight = height;
		mImage[0] = Bitmap.createScaledBitmap(mImage[0], width, height,true);		
		// with matrix
	}
	
	/**이미지 위치 지정. setImageRes 로 먼저 이미지를 정해야 한다.
	 * @throws Exception */
	public void setLocation(int x,int y) {	
		mX = x; mY = y;
//		mImage[0] = Bitmap.createBitmap(mImage[0], x, y, mImage[0].getWidth(), mImage[0].getHeight());
	}
	
	/**Sprite 영역 지정. MultiTouch에 의해 변하는 영역을 구한다. 
	 * @param x : x coordinate
	 * @param y : y coordinate
	 * @param ratioX : changed width ratio by multi touch
	 * @param ratioY : changed height ratio by multi touch
	 * */
	public void setArea(float x, float y, float ratioX, float ratioY) {
		mMatrix.getValues(mValues);
		mCurrentX = (int)mValues[2];
		mCurrentY = (int)mValues[5];
		
		mWidth = ((int)(((float)mImage[0].getWidth())*ratioX)); 
		mHeight = ((int)(((float)mImage[0].getHeight())*ratioY)); 
		
	}
	
	/**이미지 리소스 지정.*/
	public void setImageRes(int resId) {
		mImage[0] = BitmapFactory.decodeResource(mRes, resId);
		mWidth = mImage[0].getWidth();
		mHeight = mImage[0].getHeight();		
	}
	
//	public void setOnClickListener(onClickListener listener) {
//		clickListener = listener;		// ontouchevent에서 controll
//	}
	public boolean isTouched(int x,int y) {
		//if(mCurrentX+mX<=x && mCurrentY+mY <= y && mCurrentX+mX+mWidth >= x && mCurrentY+mY+mHeight >= y) {
		if(mCurrentX<=x && mCurrentY <= y && mCurrentX+mWidth >= x && mCurrentY+mHeight >= y) {
			mImageState = 1;	// 1 -> clicked
			return true;
		}
		mImageState = 0;	// 0 -> normal
		return false;
	}
}